/*
 * Spojeni.java
 *
 * Created on 3. duben 2012, 13:05
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package tcinert;
import com.siemens.icm.io.ATCommand;
import com.siemens.icm.io.ATCommandFailedException;
import com.siemens.icm.io.ATCommandResponseListener;
import com.siemens.icm.io.CommConnectionControlLines;
import com.siemens.icm.io.CommConnectionControlLinesListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.midlet.*;
import javax.microedition.io.CommConnection;
import javax.microedition.io.Connector;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
 *Trida spojeni
 * - cteni dat a verifikace dat
 * @author Tomas Cinert
 * @version 0.9
 */
public class Spojeni implements Runnable{
    Zaznam a;
    StringBuffer sb;
    DataInputStream vstup;
    CommConnectionControlLines spojeni;
    /* Pomocne promenne */
    int c;
    char temp;
    boolean loop=true;
    
    /**
     * Konstruktor
     *- vytvori spojeni
     */
    public  Spojeni(Zaznam z, StringBuffer buffer, CommConnectionControlLines spojeni){
        this.a=z;
        this.sb=buffer;
        this.spojeni=spojeni;
        
        /* Vytvoreni spojeni*/
        try {
            
            vstup = spojeni.openDataInputStream();          // Otevreni InputStreamu
            a.zapis("Seriove spojeni otevreno",typZapisu.Informativni);// Inicializace bufferu
        } catch (IOException ex) {                  // V pripade problemu (nedoslo k otevreni, preteceni timeoutu)
            a.zapis("Pruser",typZapisu.Informativni);
            
        }
        
    }
    
    /** 
     *Overeni dostupnosti dat ve vstupnim bufferu
     **/
    private boolean dostupnaData() throws IOException {
        if(vstup.available()>0) {
            return true;
        } else {
            return false;
        }
    }
    
    /**
     *Cteni dat a verifikace, zda jde o definovany ramce
     **/
    public synchronized String cteniDat() throws IOException {
        if(dostupnaData()){
            c = vstup.read();       // Nacteni  vstupu
            if(c=='<') {
                a.zapis("Mame start ramce",typZapisu.Aktualizace);
                
                for(int i=0;i<18;i++){
                    if(dostupnaData()) {
                        c=vstup.read();
                        temp=(char)c;
                        sb.append(temp);            // Ulozeni do bufferu
                        //  a.zapis(sb.toString(),typZapisu.Aktualizace);
                        
                    } else {
                        
                        a.zapis("Nedosly veskara data",typZapisu.Chybovy);
                        return null;
                    }
                }
                
                loop=false;
                if(sb.charAt(17)!='>')      // Prijaty neuplna data -> nezapisovat a pozadat o znovu poslani
                {
                    a.zapis("Prijaty neuplna data",typZapisu.Chybovy);
                    sb.delete(0,17);//Smazani bufferu
                    return null;
                } else {
                    sb.deleteCharAt(17);
                    a.zapis("Prijate data v poradku.",typZapisu.Informativni); // ZApis do DB
                    a.zapis("Data:"+sb.toString(),typZapisu.Informativni);
                    loop=false;
                    return sb.toString();
                }
                
            }
            
        }else{
            a.zapis("Data nejsou dostupna",typZapisu.Chybovy);
            return null;
        }
        
        return sb.toString();
    }
   
    /**
     *Hlavni cast vlakna */
    public void run() {
        a.zapis("Main",typZapisu.Informativni);
        while(loop) {         // Test na  klavesu ENTER
            try {
                cteniDat();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
                 
        }
        try {
            vstup.close();
            Thread.sleep(1000);
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch(InterruptedException ex){
            ex.printStackTrace();}
        a=null;
        
    }
    
}




